#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <config.h>
#include <disp_manager.h>
#include <video_manager.h>
#include <convert_manager.h>
#include <render.h>
#include <string.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>

int main(int argc, char *argv[])
{   

    T_VideoDevice g_tVideoDevice;
    T_VideoOpr g_tVideoOpr;
    T_VideoBuff g_tVideoBuff;



    if (argc != 2)
    {
        printf("Usage:\n");
        printf("%s </dev/video0,1,...>\n", argv[0]);
        return -1;
    }
    int ret;

    // 初始化显示设备
    ret = DisplayInit();
    if (ret != 0)
    {
        printf("DisplayInit failed\n");
        return -1;
    }
    // 选择framebuffer并初始化
    ret = SelectAndInitDefaultDispDev("framebuffer");
    if (ret!= 0)
    {
        printf("SelectAndInitDefaultDispDev failed\n");
    }

    // 注册所有的视频操作结构体
    RegisterAllConvertOpr(&g_tVideoOpr);
    
    // 初始化摄像头
    InitVideoDevice(argv[1], &g_tVideoDevice);

    // 注册所有转换操作结构体
    RegisterAllConvertOpr();
    
    // 启动设备
    ret = g_tVideoDevice.ptOpr->StartDevice(g_tVideoDevice);
    if (ret != 0)
    {
        printf("StartDevice failed\n");
        return -1;
    }


    while (1)
    {
        // 读取一帧
        ret = g_tVideoDevice.ptOpr->GetFrame(g_tVideoDevice, g_tVideoBuff);
        if (ret! = 0)
        {
            printf("GetFrame failed\n");
        }
        

        // 格式转化

        // 判断尺寸是否超过lcd物理尺寸？

        // 显示到lcd
    }
    

}